package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {

	fmt.Println(strings.Contains("seafood", "foo"))
	fmt.Println(strings.Contains("seafood", "bar"))
	fmt.Println(strings.Contains("seafood", ""))
	fmt.Println(strings.Contains("", ""))

	fmt.Println(strings.Index("chicken", "ken"))

	fmt.Println()
	// 字符串转换
	fmt.Println("###### 字符串追加 ###### ")
	str := make([]byte, 0, 100)
	str = strconv.AppendInt(str, 222, 10)
	str = strconv.AppendBool(str, false)
	str = strconv.AppendQuote(str, "abcdef")
	str = strconv.AppendQuoteRune(str, '单')
	fmt.Println(string(str))

	fmt.Println("###### 字符串追加 ###### ")
	a := strconv.FormatBool(false)
	b := strconv.FormatFloat(123.23, 'g', 12, 64)
	c := strconv.FormatInt(1234, 10)
	d := strconv.FormatUint(12345, 10)
	e := strconv.Itoa(1023)

	fmt.Println(a, b, c, d, e)

	fmt.Println("###### 将字符串转化为布尔类型 ###### ")
	// 它接受真值：1, t, T, TRUE, true, True
	// 它接受假值：0, f, F, FALSE, false, False.
	// 其它任何值都返回一个错误

	fmt.Println(strconv.ParseBool("1"))
	fmt.Println(strconv.ParseBool("t"))
	fmt.Println(strconv.ParseBool("T"))
	fmt.Println(strconv.ParseBool("true"))
	fmt.Println(strconv.ParseBool("True"))
	fmt.Println(strconv.ParseBool("TRUE"))
	fmt.Println(strconv.ParseBool("TRue"))
	// false strconv.ParseBool: parsing "TRue": invalid syntax
	fmt.Println(strconv.ParseBool("0"))     // false
	fmt.Println(strconv.ParseBool("f"))     // false
	fmt.Println(strconv.ParseBool("F"))     // false
	fmt.Println(strconv.ParseBool("false")) // false
	fmt.Println(strconv.ParseBool("False")) // false
	fmt.Println(strconv.ParseBool("FALSE")) // false
	fmt.Println(strconv.ParseBool("FALse"))
	// false strconv.ParseBool: parsing "FAlse": invalid syntax

	fmt.Println("###### boolean 类型转化 ###### ")
	// FormatBool 将布尔值转换为字符串 "true" 或 "false"
	fmt.Println(strconv.FormatBool(0 < 1))
	fmt.Println(strconv.FormatBool(0 > 1))

	fmt.Println("###### AppendBool 将布尔值 b 转化为字符串 'true' 或者 'false' ###### ")
	rst := make([]byte, 0)
	rst = strconv.AppendBool(rst, 0 < 1)
	fmt.Printf("%s\n", rst) // true
	rst = strconv.AppendBool(rst, 0 > 1)
	fmt.Printf("%s\n", rst) // truefalse

	// ParseFloat 将字符串转换为浮点数
	fmt.Println("###### ParseFloat 将字符串转换为浮点数 ######")
	s := "0.12345678901234567890"
	f, err := strconv.ParseFloat(s, 32)
	fmt.Println(f, err)          // 0.12345679104328156  // float64
	fmt.Println(float32(f), err) // 0.12345679  // float32
	f, err = strconv.ParseFloat(s, 64)
	fmt.Println(f, err) // 0.12345678901234568

}
